#include "resistance.h"
#include "fixed_parameter.h"

/**
 * @brief   构造函数
 * @param   r_value,r_error,r_power - 电阻的阻值，精度，功率（默认 100mW）
 */
resistance::resistance(double r_value, double r_error, double r_power)
{
    if (r_value > 0)
    {
        value = r_value;
    }
    else value = 0;

    if (r_error > 0)
    {
        error = r_error;
    }
    else error = 0;

    if (r_power > 0)
    {
        power = r_power;
    }
}

/**
 * @brief   构造函数
 * @param   tcr - 电阻温度系数（PPM)
 * @param   acr - 电阻老化系数
 */
resistance::resistance(double r_value, double r_error, double r_power, double r_tcr, double r_acr)
{
    resistance(r_value, r_error, r_power);
    if (r_tcr < 0)
    {
        tcr = 0;
    }
    else tcr = r_tcr;

    if (r_acr < 0)
    {
        acr = 0;
    }
    else acr = r_acr;
}



/**
 * @brief   设置电阻阻值
 */
void resistance::set_value(double r_value)
{
    if (r_value <= 0)
    {
        return;
    }
    else
    {
        this->value = r_value;
    }
}

/**
 * @brief   设置电阻阻值
 */
void resistance::set_error(double r_error)
{
    if (r_error < 0)
    {
        return;
    }
    else
    {
        this->error = r_error;
    }
}

/**
 * @brief   设置电阻标称功率
 */
void resistance::set_power(double r_power)
{
    if (r_power <= 0)
    {
        return;
    }
    else
    {
        this->power = r_power;
    }
}

/**
 * @brief   设置电阻温度系数
 */
void resistance::set_tcr(double r_tcr)
{
    if (r_tcr < 0)
    {
        return;
    }
    else
    {
        tcr = r_tcr;
    }
}

/**
 * @brief   设置电阻老化系数
 */
void resistance::set_acr(double r_acr)
{
    if (r_acr < 0)
    {
        return;
    }
    else
    {
        tcr = r_acr;
    }
}

/**
 * @brief   获取电阻标称值
 */
double resistance::get_value()
{
    if (value >= 0.0)
    {
        return value;
    }
    else return -1; //报错
}

/**
 * @brief   获取电阻误差
 */
double resistance::get_error()
{
    if (error >= 0)
    {
        return error;
    }
    else return -1;
}

/**
 * @brief   获取电阻标称功率
 */
double resistance::get_power()
{
    if (power >= 0)
    {
        return power;
    }
    else return -1;
}

/**
  * @brief  获取电阻的最大阻值
  * @param  max_work_temperature - 最大环境工作温度
  * @param  max_work_life - 最大工作寿命
  * @retval wcca 下电阻的最大值
 */
double resistance::get_max_value(double max_work_temperature, unsigned int max_work_life)
{
    // 计算最大偏差
    double max_error = error;
    max_error += tcr * 10e-6 * (max_work_temperature - STANDARD_TEMPERATURE);
    max_error += acr * max_work_life;

    return (1 + max_error) * value;
}

/**
  * @brief  获取电阻的最小阻值
  * @param  max_work_temperature - 最大环境工作温度
  * @param  max_work_life - 最大工作寿命
  * @retval wcca 下电阻的最小值
 */
double resistance::get_min_value(double max_work_temperature, unsigned int max_work_life)
{
    // 计算最大偏差
    double max_error = error;
    max_error += tcr * 10e-6 * (max_work_temperature - STANDARD_TEMPERATURE);
    max_error += acr * max_work_life;

    return (1 - max_error) * value;
}

/**
 * @brief   析构函数
 */
resistance::~resistance()
{

}


